home *** CD-ROM | disk | FTP | other *** search
-
- {
- Since I received the request I post the following TOT (TechnoJock) snippet.
- The object in the code below is a window with progress bar.
- The object is very simple so I didn't comment the source.
- I did include an example.
-
- Here we go :
- }
-
- {==========================================================================}
- {= Unit name : TotPro =}
- {= Version : 1.0 =}
- {= Public Objects : ProcessOBJ =}
- {===--------------------------------------------------------------------===}
- {= Programmer : Sergey Perevoznik =}
- { root@pcb.chernigov.ua }
- {= Language : Borland Pascal 7.0 =}
- {===--------------------------------------------------------------------===}
-
- Unit TotPro;
-
- Interface
-
- Uses
- TotStr,
- TotFast,
- TotWin;
-
- Type
- ProcessOBJ = object
- vWinPtr : WinPtr;
- ScaleSym : char;
- DoneSym : char;
- ScaleCol : byte;
- DoneCol : byte;
- OneStep : real;
- CountCycle : longint;
- ScaleLen : byte;
- OldX : byte;
- InitVal,
- DoneVal : longInt;
- Currentpercent : byte;
-
- Constructor Init(InitValue, EndValue : longint;
- Title : string);
- Procedure SetScale(ScaleSymbol,
- DoneSymbol : char;
- ScaleColor,
- DoneColor : byte);
- Procedure Run;
- Procedure UpDate;
- Destructor Done;
- end;
-
- Implementation
-
-
- Function FillCh(Sym:Char;L:Byte):String; Assembler;
- ASM
- PUSH DS
- LES DI,@Result
- XOR CX,CX
- MOV CL,L
- CMP CL,0
- MOV AL,CL
- STOSB
- MOV CL,AL
- JE @@1
- MOV AL,SYM
- CLD
- REP STOSB
- @@1:
- POP DS
- end;
-
-
- Constructor ProcessOBJ.Init(InitValue, EndValue : longint;
- Title : string);
- begin
- New(vWinPtr,Init);
- vWinPtr^.SetTitle(Title);
- vWinPtr^.SetSize(15,8,65,12,2);
- vWinPtr^.SetColors($70,$70,$70,$70);
- ScaleSym := '░';
- DoneSym := '█';
- ScaleCol := $07;
- DoneCol := $70;
- OldX := 2;
- initVal := InitValue;
- DoneVal := EndValue;
- CurrentPercent := 0;
- CountCycle := 0;
- end;
-
-
- Procedure ProcessOBJ.SetScale(ScaleSymbol,
- DoneSymbol : char;
- ScaleColor,
- DoneColor : byte);
- begin
- ScaleSym := ScaleSymbol;
- DoneSym := DoneSymbol;
- ScaleCol := ScaleColor;
- DoneCol := DoneColor;
- end;
-
-
- Procedure ProcessOBJ.Run;
- begin
-
- vWinPtr^.Draw;
- ScaleLen := vWinPtr^.vBorder.X2 - vWinPtr^.vBorder.X1 - 8;
- Screen.WriteAT(2,2,ScaleCol,FillCh(ScaleSym,ScaleLen));
- OneStep := (DoneVal - Initval) / 100;
- end;
-
- Procedure ProcessOBJ.Update;
- var
- Cp1 : byte;
- begin
- Inc(CountCycle);
- Cp1 := Round(CountCycle/OneStep);
- if Cp1 > CurrentPercent then CurrentPercent := Cp1;
- Screen.WriteAT(2,2,DoneCol,FillCH(DoneSym,trunc(CurrentPercent*ScaleLen/100)));
- Screen.WriteAT(vWinPtr^.vBorder.X2 - vWinPtr^.vBorder.X1- 5,2,
- DoneCol,intTostr(CurrentPercent) + '%');
- end;
-
- Destructor ProcessOBJ.Done;
- begin
- Dispose(vWinPtr,done);
- end;
- end.
-
- {
- Program Example;
-
- Uses TotPro,
- TotFast,
- CRT;
-
- Var
- Process : ProcessOBJ;
- I : integer;
- begin
- ClrScr;
- Screen.CursOFF;
- Process.Init(0,80,'TOT Process Example');
- Process.Run;
- For I := 1 to 80 do
- begin
- Process.Update;
- Delay(30);
- end;
- Process.Done;
- Screen.CursON;
- end.
-
- }
-